<?php
namespace Zxf5115\Laravel\Local\Upload\Providers;

use Illuminate\Foundation\AliasLoader;
use Illuminate\Support\ServiceProvider;

use Zxf5115\Laravel\Local\Upload\Upload;

/**
 * 上传服务提供者
 */
class UploadServiceProvider extends ServiceProvider
{
  /**
   * 服务延迟加载
   */
  protected $defer = true;


  /**
   * 注册服务
   */
  public function register() : void
  {
    // 合并配置, 配置项的根键名（对应应用程序 config 目录下的配置文件）
    $this->mergeConfigFrom($this->getConfigPath(), 'upload');

    // 单例绑定服务
    $this->app->singleton('upload', function ($app) {
      return Upload::getInstance();
    });
  }


  /**
   * 启动应用服务
   */
  public function boot() : void
  {
    $this->registerAliases();
    $this->publishConfig();
    $this->publishTranslations();
  }

  /**
   * 注册门面别名
   */
  protected function registerAliases() : void
  {
    AliasLoader::getInstance()->alias('Upload', Upload::class);
  }


  /**
   * 获取配置文件路径
   */
  protected function getConfigPath() : string
  {
    return __DIR__ . '/../../config/config.php';
  }


  /**
   * 发布配置文件
   */
  protected function publishConfig() : void
  {
    $this->publishes([
      $this->getConfigPath() => config_path('zxf5115.php'),
    ], 'zxf5115-upload-config');
  }


  /**
   * 发布语言文件
   */
  protected function publishTranslations() : void
  {
    $this->publishes([
      __DIR__ . '/../../lang' => lang_path(),
    ], 'zxf5115-upload-lang');
  }


  /**
   * 延迟加载服务提供列表
   *
   * @return array
   */
  public function provides() : array
  {
    return [
      'upload',
    ];
  }
}
